package br.com.fogas.database.entidade;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;

import br.com.fogas.database.IMetadata;
import br.com.fogas.utils.FogasUtility;
import br.com.fogas.utils.StringUtility;
import br.com.fogas.webservice.parser.cliente.T_Medidor_Item;

import com.j256.ormlite.field.DataType;
import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable;

@DatabaseTable(tableName=IMetadata.IMedidor.table_name)
public class Medidor implements IMetadata, Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	@DatabaseField(generatedId = true, columnName=IMedidor.id)
	private Integer id;
	
	@DatabaseField(foreign=true, foreignAutoRefresh=true, columnName=IMedidor.tx_plano_visita)
	private PlanoVisitas tx_plano_visita;

	@DatabaseField(unique=true, canBeNull=false, width=10, columnName=IMedidor.tx_cod_medidor)
	private String tx_cod_medidor;
	
	@DatabaseField(width=10, foreign=true, foreignAutoRefresh=true, columnName=IMedidor.tx_cod_cliente)
	private Cliente tx_cod_cliente;
	
	@DatabaseField(width=10, foreign=true, foreignAutoRefresh=true, columnName=IMedidor.tx_cod_local)
	private Cliente tx_cod_local;
	
	@DatabaseField(width=40, columnName=IMedidor.tx_desc_medidor)
	private String tx_desc_medidor;
	
	@DatabaseField(width=2, columnName=IMedidor.tx_status)
	private String tx_status;
	
	@DatabaseField(width=15, columnName=IMedidor.nb_ult_leitura)
	private String nb_ult_leitura;
	
	@DatabaseField(width=19, dataType = DataType.DATE_STRING, format = "dd/MM/yyyy HH:mm:ss", columnName=IMedidor.ts_ult_leitura)
	private Date ts_ult_leitura;
	
	@DatabaseField(width=15, columnName=IMedidor.nb_leitura_atual)
	private String nb_leitura_atual;
	
	@DatabaseField(dataType= DataType.BIG_DECIMAL_NUMERIC, columnName=IMedidor.vl_cons_medio)
	private BigDecimal vl_cons_medio;
	
	@DatabaseField(dataType= DataType.BIG_DECIMAL_NUMERIC, columnName=IMedidor.vl_cons_acum)
	private BigDecimal vl_cons_acum;
	
	@DatabaseField(width=15, columnName=IMedidor.nb_min_cont)
	private String nb_min_cont;
	
	@DatabaseField(width=15, columnName=IMedidor.nb_max_cont)
	private String nb_max_cont;
	
	@DatabaseField(dataType= DataType.BIG_DECIMAL_NUMERIC, columnName=IMedidor.vl_min_kg)
	private BigDecimal vl_min_kg;
	
	public Medidor() {
		
	}
	
	public Medidor(T_Medidor_Item item, Cliente cliente, Cliente local) {
		this.setTx_cod_medidor(item.getCOD_MEDIDOR());
		this.setTx_cod_cliente(cliente);
		this.setTx_cod_local(local);
		this.setTx_desc_medidor(item.getDESCRICAO());
		this.setTx_status(item.getSTATUS());
		this.setNb_ult_leitura(item.getULTIMA_LEITURA()); 
		this.setVl_cons_acum(getConsumo(item.getCONSUMO_ACUMUL()));
		this.setVl_cons_medio(getConsumo(item.getCONSUMO_MED()));
		this.setVl_min_kg(getConsumo(item.getCONSUMO_MIN()));
		this.setNb_min_cont(item.getMIN_CONT());
		this.setNb_max_cont(item.getMAX_CONT());
		this.setTs_ult_leitura(getUltimaLeitura(item.getREG_DATA(), item.getREG_HORA()));
	}
	
	private Date getUltimaLeitura(String data, String hora) {
		Date ultimaLeitura = null;
		
		if(StringUtility.isNotEmpty(data) && StringUtility.isNotEmpty(hora)) {
			String dataHora = data +" "+ hora;
			if(!StringUtility.equals(dataHora, "0000-00-00 00:00:00")) {
				ultimaLeitura = FogasUtility.data.getDateByStringAndFormat(dataHora, "yyyy-mm-dd HH:mm:ss");
			}
		}
		return ultimaLeitura;
	}
	
	private BigDecimal getConsumo(String vl) {
		BigDecimal vlr = new BigDecimal(0);
		try {
			if(StringUtility.isNotEmpty(vl)) {
				vlr = BigDecimal.valueOf(Double.valueOf(vl));
			}
		} catch (NumberFormatException e) {
			e.printStackTrace();
		}
		return vlr;
	}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}
	
	public PlanoVisitas getTx_plano_visita() {
		return tx_plano_visita;
	}
	
	public void setTx_plano_visita(PlanoVisitas tx_plano_visita) {
		this.tx_plano_visita = tx_plano_visita;
	}

	public String getTx_cod_medidor() {
		return tx_cod_medidor;
	}

	public void setTx_cod_medidor(String tx_cod_medidor) {
		this.tx_cod_medidor = tx_cod_medidor;
	}

	public Cliente getTx_cod_cliente() {
		return tx_cod_cliente;
	}
	
	public void setTx_cod_cliente(Cliente tx_cod_cliente) {
		this.tx_cod_cliente = tx_cod_cliente;
	}

	public Cliente getTx_cod_local() {
		return tx_cod_local;
	}
	
	public void setTx_cod_local(Cliente tx_cod_local) {
		this.tx_cod_local = tx_cod_local;
	}

	public String getTx_desc_medidor() {
		return tx_desc_medidor;
	}

	public void setTx_desc_medidor(String tx_desc_medidor) {
		this.tx_desc_medidor = tx_desc_medidor;
	}

	public String getTx_status() {
		return tx_status;
	}

	public void setTx_status(String tx_status) {
		this.tx_status = tx_status;
	}

	public String getNb_ult_leitura() {
		return nb_ult_leitura;
	}

	public void setNb_ult_leitura(String nb_ult_leitura) {
		this.nb_ult_leitura = nb_ult_leitura;
	}

	public Date getTs_ult_leitura() {
		return ts_ult_leitura;
	}

	public void setTs_ult_leitura(Date ts_ult_leitura) {
		this.ts_ult_leitura = ts_ult_leitura;
	}

	public String getNb_leitura_atual() {
		return nb_leitura_atual;
	}

	public void setNb_leitura_atual(String nb_leitura_atual) {
		this.nb_leitura_atual = nb_leitura_atual;
	}

	public BigDecimal getVl_cons_medio() {
		return vl_cons_medio;
	}

	public void setVl_cons_medio(BigDecimal vl_cons_medio) {
		this.vl_cons_medio = vl_cons_medio;
	}

	public BigDecimal getVl_cons_acum() {
		return vl_cons_acum;
	}

	public void setVl_cons_acum(BigDecimal vl_cons_acum) {
		this.vl_cons_acum = vl_cons_acum;
	}

	public String getNb_min_cont() {
		return nb_min_cont;
	}

	public void setNb_min_cont(String nb_min_cont) {
		this.nb_min_cont = nb_min_cont;
	}

	public String getNb_max_cont() {
		return nb_max_cont;
	}

	public void setNb_max_cont(String nb_max_cont) {
		this.nb_max_cont = nb_max_cont;
	}

	public BigDecimal getVl_min_kg() {
		return vl_min_kg;
	}

	public void setVl_min_kg(BigDecimal vl_min_kg) {
		this.vl_min_kg = vl_min_kg;
	}
}